import json
import os
import socket
from conf import conf
import time
def get_default_ip():
    current_dir = os.path.dirname(os.path.abspath(__file__)).replace("\\", "/")
    try:
        with open(current_dir+"/../conf/"+"config.json", "r") as f:
            config = json.load(f)
            return config.get("ip", "127.0.0.1"), config.get("port", 8080)
    except:
        return "127.0.0.1",8080  # 如果文件不存在或读取失败，返回默认IP

default_ip, default_port = get_default_ip()

def send_file(filename,mode = 'file',to='server', ip=default_ip, port=default_port):
    ip, port = get_default_ip()
    try:
        s = socket.socket()
        # print(f"正在尝试连接到 {ip}:{port}...")
        s.connect((ip, port))
        # print("连接成功！")
        # 传输模式，固定长度（比如 32 字节），不足补空格
        s.sendall(mode.encode().ljust(32, b' '))

        if mode == 'file': # 文件发送模式
            # 发送32字节的对象名
            s.sendall(to.encode().ljust(32, b' '))
            # 再发送文件名
            s.sendall(filename.split('/')[-1].encode().ljust(128, b' '))
            # 再发送文件内容
            with open(filename, 'rb') as f:
                for chunk in iter(lambda: f.read(1024), b''):
                    s.sendall(chunk)
            print("文件发送完成！")
        elif mode == 'cmd':
            s.sendall(filename.encode().ljust(64, b' '))
            print("命令发送完成！")
        elif mode == 'config':
            config = conf.read_json()
            s.sendall(filename.encode().ljust(32, b' '))

            s.sendall(str(config.get(filename)).encode().ljust(64, b' '))
        else:
            print("传输模式错误！")

    except ConnectionRefusedError:
        print(f"连接被拒绝！请检查服务器是否在运行，以及IP地址和端口是否正确。")
    except socket.gaierror:
        print(f"无法解析主机名！请检查IP地址是否正确。")
    except FileNotFoundError:
        print(f"找不到文件：{filename}")
    except Exception as e:
        print(f"发生错误：{str(e)}")
    finally:
        s.close()
        print("连接已关闭。")